package com.ytsky.quotesystem.controller;

import com.ytsky.quotesystem.entity.Comment;
import com.ytsky.quotesystem.entity.User;
import com.ytsky.quotesystem.service.CommentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class CommentController {
    private static final Logger logger= LoggerFactory.getLogger(CommentController.class);

    @Autowired
    private CommentService commentService;

    /**
     *添加评论
     * @return
     */
    @GetMapping("blogDetail")
    public ModelAndView commentAddView(){
        ModelAndView mav=new ModelAndView("blogDetail");
        return  mav;
    }

    @PostMapping("/blogDetail")
    public ModelAndView commentAdd(@Validated Comment comment, BindingResult bindingResult){
        logger.info( "test ==="+ comment);
        ModelAndView mav=new ModelAndView("redirect:/blogDetail");
        Map<String,String> errorMessages=new HashMap<>();
        if (bindingResult.hasErrors()) {
//            如果有验证错误信息，那么要进行处理
//            获得出现错误域，以及相应的错误消息文本
            final List<FieldError> fieldErrors = bindingResult.getFieldErrors();
//            错误信息放入到映射中
            for (FieldError error : fieldErrors) {
//                从每一个域错误对象中取出域名称，错误信息，加到映射集合中
                errorMessages.put(error.getField(), error.getDefaultMessage());
            }
//            将错误信息发送给视图
            mav.addObject("errorMessages", errorMessages);
//            将客户填写的信息，重新现实在表单中
            mav.addObject("comment",comment);
//            由于没有保存数据，因此不必进行重定向，内部转发请求到视图。同时，还要以保留请求数据，以及相应的信息。
            mav.setViewName("blogDetail");
        } else {
//            如果没有验证错误信息，验证通过，保存客户信息
//            调用服务方法保存客户数据
            boolean result=commentService.append(comment);
            if(result){
                logger.info("新增评论信息成功 - " + comment);
            }else {
                logger.info("新增评论信息失败 - " + comment);
            }
        }

        return mav;
    }


}
